// interface IObject {
//     [key: string]: string
// }

// export const isObject = (obj: any): obj is IObject => {
//     return obj !== null && typeof obj === 'object' && !Array.isArray(obj)
// }

// export const fn = (name: string, ...args: any[]): string => {
//     return `${name}(${args.join(', ')})`
// }
// let name = "winame"
// export const Fn = function (this: Window) {
//     const name = 'Fn'
//     return this.name
// }

// // OmitThisParameter 提取函数类型的参数类型，不包括 this 参数
// // ThisParameterType 提取函数类型的 this 参数类型，如果没有 this 参数则返回 unknown
// type thisType = ThisParameterType<typeof fn>
// type FnType = OmitThisParameter<typeof fn>

// type ThisType = ThisParameterType<typeof Fn>
// type TFnType = OmitThisParameter<typeof Fn>
// type TFn = typeof Fn

// interface IPerson {
//     name: string
//     age: number
// }
// // Omit 忽略属性
// type IStudent1 = Omit<IPerson, 'age'>
// // Pick 提取属性
// type IStudent2 = Pick<IPerson, 'name'>

// interface IStudent3 {
//     info: IPerson,
//     study: () => void,
//     eating: () => void,
// }

// const person: IStudent3 = {
//     info: { name: 'winame', age: 18 },
//     study: () => {
//         console.log(this.info.name);
//     },
//     eating: () => { },
// }
